var h = {}; 
h.get = function (url, data, ok, error) { 
    $.ajax({ 
        url: url, 
        data: data, 
        dataType: 'json', 
        success: ok, 
        error: error 
    }); 
} 
h.post = function (url, data, ok, error) { 
    $.ajax({ 
        url: url, 
        data: data, 
        type: 'post', 
        dataType: 'json', 
        success: ok, 
        error: error 
    }); 
} 
//获取url参数 
h.url = function (url) { 
    if (!url) { 
        url = location.search.substring(1); 
    } else { 
        url = url.substr(url.indexOf('?') + 1); 
    } 
    var args = new Object();   // 声明并初始化一个 "类" 
    // 获得地址(URL)"?"后面的字符串. 
    var query = decodeURI(url); 
    var pairs = query.split("&");  // 分割URL(别忘了'&'是用来连接下一个参数) 
    for (var i = 0; i < pairs.length; i++) { 
        var pos = pairs[i].indexOf('='); 
        if (pos == -1) continue; // 它在找有等号的 数组[i] 
        var argname = pairs[i].substring(0, pos); // 参数名字 
        var value = pairs[i].substring(pos + 1);  // 参数值 
        // 以键值对的形式存放到"args"对象中 
        args[argname] = decodeURI(value); 
    } 
    return args; 
} 
   
// 返回字符串的实际长度, 一个汉字算2个长度  
String.prototype.strlen = function () { 
    return this.replace(/[^\x00-\xff]/g, "**").length; 
} 
//字符串超出省略 
String.prototype.cutstr = function (len) { 
    var restr = this; 
    var wlength = this.replace(/[^\x00-\xff]/g, "**").length; 
    if (wlength > len) { 
        for (var k = len / 2; k < this.length; k++) { 
            if (this.substr(0, k).replace(/[^\x00-\xff]/g, "**").length >= len) { 
                restr = this.substr(0, k) + "..."; 
                break; 
            } 
        } 
    } 
    return restr; 
} 
//替换全部 
String.prototype.replaceAll = function (s1, s2) { 
    return this.replace(new RegExp(s1, "gm"), s2) 
} 
//字符串去空格 
String.prototype.trim = function () { 
    return this.replace(/(^\s*)|(\s*$)/g, ""); 
} 
String.prototype.trimAll = function () { 
    return this.replace(/\s+/g, ""); 
} 
String.prototype.lTrim = function () { 
    return this.replace(/(^\s*)/g, ""); 
} 
String.prototype.rTrim = function () { 
    return this.replace(/(\s*$)/g, ""); 
} 
//判断是否以某个字符串开头 
String.prototype.startWith = function (s) { 
    return this.indexOf(s) == 0 
} 
//判断是否以某个字符串结束 
String.prototype.endWith = function (s) { 
    var d = this.length - s.length; 
    return (d >= 0 && this.lastIndexOf(s) == d) 
} 
   
//删除数组中存在重复的元素 
function getUnique(someArray) { 
    tempArray = someArray.slice(0); //复制数组到临时数组 
    for (var i = 0; i < tempArray.length; i++) { 
        for (var j = i + 1; j < tempArray.length;) { 
            if (tempArray[j] == tempArray[i]) 
                //后面的元素若和待比较的相同，则删除并计数； 
                //删除后，后面的元素会自动提前，所以指针j不移动 
            { 
                tempArray.splice(j, 1); 
            } 
            else { 
                j++; 
            } 
            //不同，则指针移动 
        } 
    } 
    return tempArray; 
} 
//判断数组中是否存在重复的元素 
function confirmRepeat(someArray) { 
    tempArray = someArray.slice(0); //复制数组到临时数组 
    for (var i = 0; i < tempArray.length; i++) { 
        for (var j = i + 1; j < tempArray.length;) { 
            if (tempArray[j] == tempArray[i]) 
                //后面的元素若和待比较的相同，则删除并计数； 
                //删除后，后面的元素会自动提前，所以指针j不移动 
            { 
                return true; 
            } 
            else { 
                j++; 
            } 
            //不同，则指针移动 
        } 
    } 
    return false; 
} 
   
//判断某个值是否在数组中 
Array.prototype.in_array = function (e) { 
    for (i = 0; i < this.length; i++) { 
        if (this[i] == e) 
            return true; 
    } 
    return false; 
} 
//判断某个值在数组中的位置 
Array.prototype.indexOf = function (e) { 
    for (i = 0; i < this.length; i++) { 
        if (this[i] == e) 
            return i; 
    } 
    return -1; 
} 
   
//转义html标签 
function HtmlEncode(text) { 
    return text.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>') 
} 
   
//格式化日期 DateFormat('yyyy_MM_dd hh:mm:ss:SS 星期w 第q季度') 
function DateFormat(format, date) { 
    if (!date) { 
        date = new Date(); 
    } 
    var Week = ['日', '一', '二', '三', '四', '五', '六']; 
    var o = { 
        "y+": date.getYear(), //year 
        "M+": date.getMonth() + 1, //month  
        "d+": date.getDate(), //day  
        "h+": date.getHours(), //hour  
        "H+": date.getHours(), //hour 
        "m+": date.getMinutes(), //minute  
        "s+": date.getSeconds(), //second  
        "q+": Math.floor((date.getMonth() + 3) / 3), //quarter  
        "S": date.getMilliseconds(), //millisecond  
        "w": Week[date.getDay()] 
    } 
    if (/(y+)/.test(format)) { 
        format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); 
    } 
    for (var k in o) { 
        if (new RegExp("(" + k + ")").test(format)) { 
            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); 
        } 
    } 
    return format; 
} 
   
//设置cookie值 
function setCookie(name, value, Hours) { 
    var d = new Date(); 
    var offset = 8; 
    var utc = d.getTime() + (d.getTimezoneOffset() * 60000); 
    var nd = utc + (3600000 * offset); 
    var exp = new Date(nd); 
    exp.setTime(exp.getTime() + Hours * 60 * 60 * 1000); 
    document.cookie = name + "=" + escape(value) + ";path=/;expires=" + exp.toGMTString() + ";domain=360doc.com;" 
} 
//获取cookie值 
function getCookie(name) { 
    var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); 
    if (arr != null) return unescape(arr[2]); 
    return null 
} 
   
//加入收藏夹 
function AddFavorite(sURL, sTitle) { 
    try { 
        window.external.addFavorite(sURL, sTitle) 
    } catch (e) { 
        try { 
            window.sidebar.addPanel(sTitle, sURL, "") 
        } catch (e) { 
            alert("加入收藏失败，请使用Ctrl+D进行添加") 
        } 
    } 
} 
//设为首页 
function setHomepage(homeurl) { 
    if (document.all) { 
        document.body.style.behavior = 'url(#default#homepage)'; 
        document.body.setHomePage(homeurl) 
    } else if (window.sidebar) { 
        if (window.netscape) { 
            try { 
                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect") 
            } catch (e) { 
                alert("该操作被浏览器拒绝，如果想启用该功能，请在地址栏内输入about:config,然后将项 signed.applets.codebase_principal_support 值该为true"); 
            } 
        } 
        var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch); 
        prefs.setCharPref('browser.startup.homepage', homeurl) 
    } 
} 
   
//跨浏览器绑定事件 
function addEventSamp(obj, evt, fn) { 
    if (!oTarget) { return; } 
    if (obj.addEventListener) { 
        obj.addEventListener(evt, fn, false); 
    } else if (obj.attachEvent) { 
        obj.attachEvent('on' + evt, fn); 
    } else { 
        oTarget["on" + sEvtType] = fn; 
    } 
} 
//跨浏览器删除事件 
function delEvt(obj, evt, fn) { 
    if (!obj) { return; } 
    if (obj.addEventListener) { 
        obj.addEventListener(evt, fn, false); 
    } else if (oTarget.attachEvent) { 
        obj.attachEvent("on" + evt, fn); 
    } else { 
        obj["on" + evt] = fn; 
    } 
} 
   
//判断是否移动设备访问 
function isMobileUserAgent() { 
    return (/iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i.test(window.navigator.userAgent.toLowerCase())); 
} 
   
//完美判断是否为网址 
function IsURL(strUrl) { 
    var regular = /^\b(((https?|ftp):\/\/)?[-a-z0-9]+(\.[-a-z0-9]+)*\.(?:com|edu|gov|int|mil|net|org|biz|info|name|museum|asia|coop|aero|[a-z][a-z]|((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d))\b(\/[-a-z0-9_:\@&?=+,.!\/~%\$]*)?)$/i 
    if (regular.test(strUrl)) { 
        return true; 
    } else { 
        return false; 
    } 
} 
   
//获取页面高度 
function getPageHeight() { 
    var g = document, a = g.body, f = g.documentElement, d = g.compatMode == "BackCompat" ? a : g.documentElement; 
    return Math.max(f.scrollHeight, a.scrollHeight, d.clientHeight); 
} 
//获取页面宽度 
function getPageWidth() { 
    var g = document, a = g.body, f = g.documentElement, d = g.compatMode == "BackCompat" ? a : g.documentElement; 
    return Math.max(f.scrollWidth, a.scrollWidth, d.clientWidth); 
} 
   
//获取页面可视宽度 
function getPageViewWidth() { 
    var d = document, a = d.compatMode == "BackCompat" 
                    ? d.body 
                    : d.documentElement; 
    return a.clientWidth; 
} 
//获取页面可视高度 
function getPageViewHeight() { 
    var d = document, a = d.compatMode == "BackCompat" 
                    ? d.body 
                    : d.documentElement; 
    return a.clientHeight; 
} 
   
//获取页面scrollLeft 
function getPageScrollLeft() { 
    var a = document; 
    return a.documentElement.scrollLeft || a.body.scrollLeft; 
} 
//获取页面scrollTop 
function getPageScrollTop() { 
    var a = document; 
    return a.documentElement.scrollTop || a.body.scrollTop; 
} 
//获取窗体可见范围的宽与高 
function getViewSize() { 
    var de = document.documentElement; 
    var db = document.body; 
    var viewW = de.clientWidth == 0 ? db.clientWidth : de.clientWidth; 
    var viewH = de.clientHeight == 0 ? db.clientHeight : de.clientHeight; 
    return Array(viewW, viewH); 
} 
//随机数时间戳 
function uniqueId() { 
    var a = Math.random, b = parseInt; 
    return Number(new Date()).toString() + b(10 * a()) + b(10 * a()) + b(10 * a()); 
} 
   
//获取网页被卷去的位置 
function getScrollXY() { 
    return document.body.scrollTop ? { 
        x: document.body.scrollLeft, 
        y: document.body.scrollTop 
    } : { 
        x: document.documentElement.scrollLeft, 
        y: document.documentElement.scrollTop 
    } 
} 
   
//匹配国内电话号码(0511-4405222 或 021-87888822)  
function istell(str) { 
    var result = str.match(/\d{3}-\d{8}|\d{4}-\d{7}/); 
    if (result == null) return false; 
    return true; 
} 
//匹配身份证(15位或18位)  
function isidcard(str) { 
    var result = str.match(/\d{15}|\d{18}/); 
    if (result == null) return false; 
    return true; 
} 
//移动电话 
function checkMobile(str) { 
    if (!(/^1[3|5|8][0-9]\d{4,8}$/.test(str))) { 
        return false; 
    } 
    return true; 
} 
// 判断输入是否是一个由 0-9 / A-Z / a-z 组成的字符串  
function isalphanumber(str) { 
    var result = str.match(/^[a-zA-Z0-9]+$/); 
    if (result == null) return false; 
    return true; 
} 
// 判断输入是否是有效的电子邮件  
function isemail(str) { 
    var result = str.match(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/); 
    if (result == null) return false; 
    return true; 
} 
   
//金额大写转换函数 transform('123431233132.23') 
function transform(tranvalue) { 
    try { 
        var i = 1; 
        var dw2 = new Array("", "万", "亿"); //大单位 
        var dw1 = new Array("拾", "佰", "仟"); //小单位 
        var dw = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //整数部分用 
        //以下是小写转换成大写显示在合计大写的文本框中      
        //分离整数与小数 
        var source = splits(tranvalue); 
        var num = source[0]; 
        var dig = source[1]; 
        //转换整数部分 
        var k1 = 0; //计小单位 
        var k2 = 0; //计大单位 
        var sum = 0; 
        var str = ""; 
        var len = source[0].length; //整数的长度 
        for (i = 1; i <= len; i++) { 
            var n = source[0].charAt(len - i); //取得某个位数上的数字 
            var bn = 0; 
            if (len - i - 1 >= 0) { 
                bn = source[0].charAt(len - i - 1); //取得某个位数前一位上的数字 
            } 
            sum = sum + Number(n); 
            if (sum != 0) { 
                str = dw[Number(n)].concat(str); //取得该数字对应的大写数字，并插入到str字符串的前面 
                if (n == '0') sum = 0; 
            } 
            if (len - i - 1 >= 0) { //在数字范围内 
                if (k1 != 3) { //加小单位 
                    if (bn != 0) { 
                        str = dw1[k1].concat(str); 
                    } 
                    k1++; 
                } else { //不加小单位，加大单位 
                    k1 = 0; 
                    var temp = str.charAt(0); 
                    if (temp == "万" || temp == "亿") //若大单位前没有数字则舍去大单位 
                        str = str.substr(1, str.length - 1); 
                    str = dw2[k2].concat(str); 
                    sum = 0; 
                } 
            } 
            if (k1 == 3) { //小单位到千则大单位进一 
                k2++; 
            } 
        } 
        //转换小数部分 
        var strdig = ""; 
        if (dig != "") { 
            var n = dig.charAt(0); 
            if (n != 0) { 
                strdig += dw[Number(n)] + "角"; //加数字 
            } 
            var n = dig.charAt(1); 
            if (n != 0) { 
                strdig += dw[Number(n)] + "分"; //加数字 
            } 
        } 
        str += "元" + strdig; 
    } catch (e) { 
        return "0元"; 
    } 
    return str; 
} 
//拆分整数与小数 
function splits(tranvalue) { 
    var value = new Array('', ''), 
    temp = tranvalue.split("."); 
    for (var i = 0; i < temp.length; i++) { 
        value = temp; 
    } 
    return value; 
} 
   
//格式化数字 
function number_format(number, decimals, dec_point, thousands_sep) { 
    /*
    * 参数说明：
    * number：要格式化的数字
    * decimals：保留几位小数
    * dec_point：小数点符号
    * thousands_sep：千分位符号
    * */ 
    number = (number + '').replace(/[^0-9+-Ee.]/g, ''); 
    var n = !isFinite(+number) ? 0 : +number, 
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), 
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, 
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point, 
        s = '', 
        toFixedFix = function (n, prec) { 
            var k = Math.pow(10, prec); 
            return '' + Math.ceil(n * k) / k; 
        }; 
   
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); 
    var re = /(-?\d+)(\d{3})/; 
    while (re.test(s[0])) { 
        s[0] = s[0].replace(re, "$1" + sep + "$2"); 
    } 
   
    if ((s[1] || '').length < prec) { 
        s[1] = s[1] || ''; 
        s[1] += new Array(prec - s[1].length + 1).join('0'); 
    } 
    return s.join(dec); 
}